<?php
//region 题目1
//1. 某俱乐部有4只⾜球队A、B、C、D队，现按照1⾄20的级别划分每个队伍，⽬前每队的战⽃⼒⽔ 平级别依次为10、7、5、4。现俱乐部为了优化各队的能⼒⽔平，决定每⽉底从战⽃⼒战⽃最⾼的队 伍抽出部分⼈⼒资源，平均分配到其他⼩队（规则：分配3个战⽃⼒的⼈⼒资源出来到其他⼩队，所 以经过⼀个⽉的调整分配，各⼩队现在的战⽃⼒⽔平：7、8、6、5）
// 那么请问，经过五年的战⽃⼒优化调整后，哪个⼩队的战⽃⼒最⾼，为多少？请编程求解该问 题，并思考是否为最优解。同时能否有对应的算法可以快速得出对应的结果？
function fight() {
    $arr = [
        'A' => 10,
        'B' => 5,
        'C' => 7,
        'D' => 4,
    ];
    echo implode(', ', $arr) . PHP_EOL;
    for ($i = 0; $i < 60; $i++) {
        $max = max($arr);
        $maxMatched = false;
        foreach ($arr as $key => $value) {
            if ($value === $max && !$maxMatched) {
                $arr[$key] = $value - 3;
                $maxMatched = true;
            }
            else {
                $arr[$key] = $value + 1;
            }
        }
        echo $i . ': ' . implode(', ', $arr) . PHP_EOL;
    }
    $max = max($arr);
    $maxKey = '';
    foreach ($arr as $key => $value) {
        if ($value === $max) {
            $maxKey = $key;
            break;
        }
    }
    return $maxKey;
}

//echo '战斗力最大的队是: ' . fight();
//就这组数据来说, 第一次循环之后, 4个队的值就在[5,6,7,8]之间循环.
//第4n+1次的结果都是[7, 6, 8, 5]
//第4n+2次的结果都是[8, 7, 5, 6 ]
//第4n+3次的结果都是[5, 8, 6, 7 ]
//第4n+4次的结果都是[6, 5, 7, 8]

//endregion

//region 题目2
//（⾮斐波那契数列⽅式）起初⼀对兔⼦，每4个⽉性成熟后⽣育下⼀对兔⼦（性成熟后 ⼀对兔⼦在接下来每⼀个⽉都会⽣育⼀对兔⼦），那么请问理想状态下，第10个⽉总共有多少对兔 ⼦，如果是5个⽉才性成熟，24个⽉后⼜是多少？可以思考是否有通⽤型算法；（tip:类和数组）
// 不能使用斐波那契算法!!!!
/**
 * (斐波那契)计算兔子的数量
 * @param int $month 月数
 * @param int $immature 成熟期
 * @return int
 */
function fib($month, $immature) {
    if ($month < $immature) {
        return 1;
    }
    else {
        return fib($month - 1, $immature) + fib($month - $immature + 1, $immature);
    }
}
//for ($i = 1; $i <= 10; $i++) {
//    echo $i . ': ' . fib($i, 4) . PHP_EOL;
//}


//用数组实现: 用数组来记录兔子数量的变化
/**
 * 计算兔子的数量
 * @param int $month 月数
 * @param int $immature 成熟期
 * @return int
 */
function calcRabbit(int $month, int $immature) {
    $arr[0] = 1;
    //未成熟期, 没有后代
    for ($i = 1; $i < $immature; $i++) {
        $arr[$i] = 0;
    }
    //成熟后
    for ($i = $immature - 1; $i < $month; $i++) {
        $arr[$i] = $arr[$i - 1] + $arr[$i - $immature + 1];
    }
    return array_sum($arr);
}

echo '4个月成熟, 10个月后兔子总数: ' . calcRabbit(10, 4) . PHP_EOL;//19
echo '5个月成熟, 20个月后兔子总数: ' . calcRabbit(20, 5) . PHP_EOL;//250

//endregion

//region 题目3
//给定数组A [4,6,3,8...](长度为n)，现随机给⼀个同样长度n的⼀个随机数组B，将B按照给定数组 A相邻数字⼤⼩关系进⾏排列，从所有符合排列的数组中筛选相邻差的绝对值之和最⼤的那些数组。

//==>没看明白

$arrA = [4, 6, 3, 8, 11];
$arrB = [];
for ($i = 0, $n = count($arrA); $i < $n; $i++) {
    $arrB[] = rand(1, 100);
}
echo implode(', ', $arrB);
//endregion